flask项目结构
撰写时间: 2019-12-15 总共: 1860 字 转载请注明: BY-SA 4.0(除特别声明或转载文章外)
前言
学习python web 开发 有许多框架可以选择,选择flask也没有什么别的原因,只是恰好听说罢了。
不说它,它,它···什么的区别和优点了。因为我目前也未能了解到这些方面,不敢妄下言论。
好了,最先接触是网上一大堆的博文和教程什么的。虽然我在这里写也有重复的意思,但是我仅限于我做做笔记什么的,记录一些学习过程的错误和设计流程。有许多不好的地方还有待改进。
根据之前的学习建立一个比较合适的项目架构
项目介绍
项目python版本3.7.2
采用flask
设计一个包涵基本CURD,文件上传等的flask web 练习
设计一个发布 观影记录和相关文章的平台。
具体几大模块,用户模块,评论模块,记录模块,文章模块
项目结构
不像其他框架,Flask应用程序没有特定的组织方式,选择权完全交给了使用者。
看了一些项目的结构都不大一样,其实蛮自由的,按照包和模块来组建项目结构好了。
基础
解释一下这个架构,
建立一个项目文件夹
cd myweb
然后为这个项目创建一个python的虚拟环境,我通常,env,venv等名称,使用python自带的就好,也可以安装其他的虚拟环境创建扩展来进行这一步。
python -m venv env
切入到虚拟环境就可以升级一下pip等,然后进行安装flask等
pip install flask
而后就可以创建一个最简单的flask应用了。按照flask官方教程所说。
# 新建一个.py文件
# 比如 运行文件
# run.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "flask web"
if __name__ == '__main__':
app.run(debug=True)
而后便可以在虚拟环境下运行该脚本了
python run.py
flask 也是一个MVC的框架,如上图,我们可以另外建立model来进行实体的映射,而控制器和路由则很容易通过函数进行控制等,利用jinja2通过模版进行视图的渲染。
拆分
进行应用程序功能的划分等,按照包和模块进行划分。将启动脚本,配置脚本,数据库脚本,应用程序脚本文件拆分。
- 在虚拟环境同级下建立一个 App 文件夹,主要进行应用程序代码的划分。
- 在App下建立
__init__.py
views.py
- 建立 run.py 用于启动flask 应用
- 建立 config.py 用于进行全局应用配置
现在就将上述最简单的代码分别迁移拆分到以上文件里,python里使用__init__.py
来进行包的划分,通常我们的一些实例等扩展的引入和配置可以写在这里。
# 在App 文件夹下建立一个__init__.py
"""
The flask application package.
"""
# 实例化一个flask 应用
from flask import Flask
app = Flask(__name__)
# 引入当前模块下的内容
from . import views
建立 views.py
"""
The flask route views
"""
from App import app
@app.route('/')
def index():
return "flask web"
可以在配置文件里写好一些配置,比如数据库等的配置等,或者从环境变量中进行读取配置等脚本代码,在启动文件里就照旧ok
"""
This script runs the Myweb application using a development server.
"""
from os import environ
from App import app
if __name__ == '__main__':
HOST = environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT,debug=True)
到此我们初步划分了项目结构。我们可以将代码全部都写在views.py里都ok,就是应用特别小甚至就只需要一个.py文件。这就要看我们的项目了,所以相对灵活。
总结
后面我们可以在App里使用蓝图等进行更加具体的划分。
- 比如进行数据库模型的对象映射models。
- 比如使用 flask-wtf 进行表单的编写等。
- 比如划分工具类包等。
进行划分主要是为了解耦等。让项目可以比较好的功能划分和维护进行下去。最后一步一步随着项目的编写壮大可能还需要重构等。目前为了学习暂时将整个项目形成如开题图所示。